這份文件主要介紹一套基於 Raspberry Pi 5 和固態硬碟 (SSD) 的整合式伺服器架構方案,透過這個方案能夠建構出一個功能豐富、安全可靠且易於自動化維護的系統環境。該架構整合了多種開源技術與雲端服務,可實現多站點託管、零信任安全控管、自動化應用部署以及跨裝置災難復原備份。本文將詳細說明設計理念、架構細節、部署流程及日常維運策略,提供個人技術實踐或小型團隊建置伺服器的參考案例。
一、架構設計理念與技術選型
本方案目標是打造一個功能齊全、效能卓越且安全性高的伺服器環境,技術選型的核心考量如下:
硬體平台選擇 (Raspberry Pi 5 + SSD)
為解決傳統 microSD 卡在高負載隨機讀寫情境下的效能瓶頸,我特別選用 NVMe SSD 作為儲存設備。透過 PCIe 總線直連 CPU,NVMe SSD 的 IOPS 和傳輸速度均遠超 microSD,實際運行的反應速度與穩定性有明顯提升,能為系統提供更強大的效能基礎。
多服務託管模型 (Hexo + .NET + HA)
利用 Caddy 伺服器作為反向代理入口,Raspberry Pi 5 可集中處理多種類型的內部服務,包括靜態網站(如 Hexo)、動態應用程式(如 .NET)及家庭智慧控制平台(如 Home Assistant)。這種集中管理方式既提升了安全性,也簡化了網路配置,讓系統資源能被更有效地運用。
零信任安全模型 (Cloudflare Zero Trust)
為避免傳統 VPN 模式可能帶來的安全隱患,我們採用了 Cloudflare 的 Zero Trust 模式,透過逐次驗證的方式確保每次存取內部應用程式的身份安全。這種「永不信任,隨時驗證」的模式有效減少了攻擊面,提升了整體系統的安全性。
自動化部署流程 (Jenkins + SSH)
根據 CI/CD 的最佳實踐,我們使用 Jenkins 作為自動化部署平台。透過 SSH 金鑰進行安全驗證,並嚴格限制 Jenkins 的系統權限,以符合最小權限原則。這樣即便 Jenkins 發生安全問題,也能確保潛在損害範圍受到控制,保護生產環境的穩定。
災難復原機制 (NAS 備份自動化)
考量到資料安全及系統可靠性,我設計了一個自動化的備份機制,每日透過網路附加儲存 (NAS) 執行定時的增量資料同步。利用
rsync協議及 delta-transfer 技術,大幅減少了備份所需的時間與網路資源,建立了一套高效率的災難復原方案。
二、系統架構與資料流詳解
本節將對系統的整體架構及資料傳輸路徑進行分析,以闡明各組件間的協作關係。
1. 外部使用者至 Cloudflare 邊緣網路之資料傳輸
當外部使用者透過網域名稱(例如 blog.your-domain.com)發起存取請求時,DNS 解析會將該請求導向地理位置最接近的 Cloudflare 邊緣節點。
此段傳輸利用 Cloudflare 自動簽發的通用 SSL/TLS 憑證進行加密。在 TLS 交握過程中,Cloudflare 會向使用者瀏覽器出示憑證,證明其身份合法性,隨後建立的對稱加密金鑰將保護後續所有應用層數據(HTTP 請求與回應)的機密性與完整性,確保使用者端與 Cloudflare 伺服器之間的通訊安全。
2. Cloudflare 內部網路至 cloudflared 服務之資料傳輸
Cloudflare 邊緣節點在接收請求後,不會將其直接路由至公網 IP。取而代之的是,請求將透過一個預先建立的、持久性的加密 WebSocket 通道 (Tunnel),轉發至部署於 Raspberry Pi 5 上的 cloudflared 服務。此通道由 cloudflared 守護程序從內部網路主動發起,因此無需在防火牆上開啟任何傳入埠口。
若請求的目標為受保護的內部服務(如 jenkins.your-domain.com),Cloudflare Access (Zero Trust) 模組將在此階段介入,將使用者重導向至指定身份提供者(如 Google)進行驗證。驗證成功後,Cloudflare 會生成包含使用者身份資訊的 JWT,僅有攜帶有效 JWT 的請求才能通過加密通道傳送至後端。
3. cloudflared 至後端應用程式之資料傳輸
cloudflared 服務在接收並解密來自 Cloudflare 的請求後,會將其以標準 HTTP 協定轉發至本地的 Caddy 伺服器。
Caddy 伺服器作為應用程式交付控制器,會依據請求標頭中的主機名稱執行相應路由策略:
靜態內容 (
**blog.\***):由 Caddy 檔案伺服器直接從/var/www/hexo提供。動態應用 (
**webapp.\***,**jenkins.\***,**ha.\***):Caddy 作為反向代理,轉發至對應應用的後端端口(例如localhost:5000或192.168.1.101:8123),同時處理 TLS 終止與請求標頭重寫,確保內網傳輸安全高效。
三、伺服器基礎建設 (RPi5 + SSD)
本階段旨在將 Raspberry Pi 5 作業系統安裝到 NVMe SSD,以獲得顯著的效能提升。
(1) 硬體準備:
Raspberry Pi 5 主機板
M.2 NVMe SSD(建議採用2230或2242規格)
PCIe 轉 M.2 擴充板(適用於 Raspberry Pi 5)
官方 27W USB-C 電源供應器
臨時使用的 microSD 卡
(2) 組裝與韌體更新:
依照擴充板說明文件,安裝 SSD 與擴充板至 Raspberry Pi 5。
使用 Raspberry Pi Imager 工具將 Raspberry Pi OS (64-bit) 燒錄至 microSD 卡。
從 microSD 卡啟動並執行以下指令更新系統與 EEPROM 韌體。
sudo apt update sudo apt full-upgrade -y sudo rpi-eeprom-update -a sudo reboot
(3) 啟用 PCIe 介面:
編輯
/boot/firmware/config.txt,啟用 PCIe Gen 3。sudo nano /boot/firmware/config.txt新增以下內容至
[all]區塊。dtparam=pciex1_gen=3儲存並重新啟動。
(4) 複製作業系統至 SSD:
使用 Raspberry Pi 桌面的 SD Card Copier 工具複製 microSD 至 SSD。
(5) 設定開機順序:
修改 EEPROM 開機順序,將 NVMe SSD 設為第一優先。
sudo rpi-eeprom-config --edit將
BOOT_ORDER修改為0xf416。
(6) 完成:
關閉設備並移除 microSD 卡,從 NVMe SSD 重新啟動。
四、網路閘道與安全策略配置 (Cloudflare)
此階段的目標是建立一個安全的外部存取通道,並為內部管理工具設定零信任存取規則。
1. Cloudflare Tunnel 組態設定
(1) 安裝 cloudflared:
於已從 SSD 啟動的 RPi5 上,依照 Cloudflare 官方文件安裝
cloudflared守護程序。# 新增 Cloudflare 的 apt repository GPG 金鑰 sudo mkdir -p --mode=0755 /usr/share/keyrings curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null # 新增 repository 來源 echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main' | sudo tee /etc/apt/sources.list.d/cloudflared.list # 更新並安裝 sudo apt-get update sudo apt-get install cloudflared -y
(2) 授權與建立 Tunnel:
執行授權指令,此指令將產生一個 URL。請在瀏覽器中開啟此 URL,登入您的 Cloudflare 帳戶並授權給您欲使用的網域。
cloudflared tunnel login建立一個新的 Tunnel,並記下產生的 Tunnel UUID。
cloudflared tunnel create my-rpi5-tunnel
(3) 設定 Tunnel 路由:
建立並編輯 Tunnel 的設定檔。
sudo nano /etc/cloudflared/config.yml填入以下內容,將
<TUNNEL_UUID>替換為上一步記下的 UUID。此設定將所有進入 Tunnel 的流量轉發至本地的 Caddy 伺服器 (port 80)。tunnel: <TUNNEL_UUID> credentials-file: /root/.cloudflared/<TUNNEL_UUID>.json ingress: - service: http://localhost:80 - service: http_status:404
(4) 啟動服務:
將 Tunnel 設定為系統服務並啟動。
sudo cloudflared service install sudo systemctl start cloudflared在 Cloudflare 的 DNS 管理介面中,建立 CNAME 紀錄,將您欲使用的子網域 (如
blog,webapp,jenkins,ha) 指向您的 Tunnel ID URL (<TUNNEL_UUID>.cfargotunnel.com)。
2. Zero Trust 存取控制策略設定
此環節為確保內部開發工具與智慧家庭系統安全之核心步驟。
(1) 登入 Cloudflare Zero Trust 儀表板,導航至 Access -> Applications。
(2) 建立 Jenkins 應用程式規則:
選擇 Add an application,類型為 Self-hosted。
Application name:
Jenkins Server。Application domain: 設定子網域為
jenkins,並選擇對應的主網域。Identity providers: 採用預設值或指定 Google 作為身份提供者。
Policy: 新增一條名為
Admin Access的Allow策略,其 Selector 設為Emails,並將 Value 指定為授權存取的電子郵件地址。此策略確保了只有特定使用者能夠觸發身份驗證流程。
(3) 建立 Home Assistant 應用程式規則:
重複上述流程以新增應用程式。
Application name:
Home Assistant。Application domain: 設定子網域為
ha。Policy: 可建立新策略,或複用已建立的
Admin Access策略以保持權限一致性。複用策略有助於簡化權限管理,當需要新增或移除管理員時,只需修改一處即可。
五、應用程式交付控制器設定 (Caddy)
Caddy 伺服器憑藉其簡潔直觀的設定檔結構,能夠高效地管理多個站點及代理規則。
# 編輯 Caddy 的設定檔
sudo nano /etc/caddy/Caddyfile
將檔案內容完全替換為以下設定,並根據實際環境修改網域名稱與 IP 位址。
# Caddyfile for multi-site hosting & proxying
# 全域設定區塊
{
log {
output file /var/log/caddy/access.log {
roll_size 10mb
roll_keep 5
}
}
}
# 站點 1: Hexo 靜態部落格
blog.your-domain.com {
root * /var/www/hexo
file_server
}
# 站點 2: .NET 9 動態網站 (反向代理)
webapp.your-domain.com {
reverse_proxy localhost:5000
}
# 站點 3: Jenkins 服務 (反向代理)
jenkins.your-domain.com {
reverse_proxy localhost:8888
}
# 站點 4: Home Assistant (跨裝置反向代理)
ha.your-domain.com {
# 將請求反向代理到 RPi4 的 IP 和 HA 的 port
# !! 請將 192.168.1.101 換成您 RPi4 的真實區域網路 IP !!
reverse_proxy 192.168.1.101:8123 {
# Home Assistant 需要這些 header 才能正確處理 WebSocket 連線
header_up Host {http.reverse_proxy.host}
header_up X-Forwarded-For {http.request.remote}
header_up X-Forwarded-Proto {http.request.scheme}
}
}
完成設定後,執行 sudo systemctl reload caddy 以應用變更。
六、應用程式部署與組態設定
1. 靜態與動態網站部署
(此部分與前文相同,涵蓋 Hexo 與 .NET 網站的部署與服務設定。)
2. Home Assistant 反向代理組態設定
為確保 Home Assistant 在反向代理環境下功能正常,需在其組態檔中將 Caddy 伺服器聲明為受信任的代理。
(1) 登入 Home Assistant,透過 File editor 或 Studio Code Server 等附加元件存取其檔案系統。
(2) 開啟 configuration.yaml 檔案。
(3) 在檔案中新增或修改 http 區塊,如下所示:
# configuration.yaml
http:
use_x_forwarded_for: true
trusted_proxies:
# !! 請將 192.168.1.100 換成您 RPi5 (運行 Caddy) 的真實區域網路 IP !!
- 192.168.1.100
此設定至關重要,use_x_forwarded_for: true 指示 Home Assistant 應從 X-Forwarded-For 標頭中獲取原始客戶端的 IP 位址,而非將所有請求視為來自代理伺服器。trusted_proxies 則是一個白名單,用以告知 Home Assistant 哪些 IP 位址的代理所傳遞的 X-Forwarded-For 標頭是可信的,以防止惡意的標頭偽造。
(4) 儲存檔案。前往 開發人員工具 -> YAML 頁面,執行 檢查設定。驗證通過後,執行 重新啟動 以使設定生效。
七、持續整合與持續部署 (CI/CD) 管線建置
此階段的目標是建立一個自動化的軟體交付流程,以實現程式碼提交後自動部署至生產環境。
(1) 安裝 Jenkins:
Jenkins 是一個 Java 應用程式,首先需安裝 Java 執行環境。
sudo apt-get update sudo apt-get install default-jre -y接著,依照 Jenkins 官方指引新增其 repository 並安裝。
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \ /usr/share/keyrings/jenkins-2023.key > /dev/null echo deb [signed-by=/usr/share/keyrings/jenkins-2023.key] \ https://pkg.jenkins.io/debian-stable binary/ | sudo tee \ /etc/apt/sources.list.d/jenkins.list > /dev/null sudo apt-get update sudo apt-get install jenkins -y
(2) 設定 Jenkins:
編輯 Jenkins 設定檔,將其預設的 8080 埠口更改為 8888,以避免與 Caddy 衝突。
sudo nano /etc/default/jenkins # 找到並修改 HTTP_PORT=8080 為 HTTP_PORT=8888重啟 Jenkins 服務:
sudo systemctl restart jenkins。透過瀏覽器訪問
http://<RPi5_IP>:8888。依照畫面指示,從/var/lib/jenkins/secrets/initialAdminPassword檔案中取得初始密碼以解鎖。選擇「安裝建議的插件」並建立您的管理員帳號。
(3) 設定 SSH 安全部署環境:
建立一個低權限的部署專用使用者
deployer,並將網站目錄的所有權賦予它。sudo adduser deployer sudo chown -R deployer:deployer /var/www/hexo為 Jenkins 系統的
jenkins使用者產生 SSH 金鑰對,並將公鑰授權給deployer使用者。# 切換至 jenkins 使用者 sudo su -s /bin/bash jenkins # 產生金鑰,全程按 Enter 使用預設值 ssh-keygen -t rsa -b 4096 # 複製公鑰內容 cat ~/.ssh/id_rsa.pub # 退出 exit將複製的公鑰內容貼入
deployer使用者的~/.ssh/authorized_keys檔案中,並設定正確的權限。sudo -u deployer mkdir -p /home/deployer/.ssh sudo -u deployer touch /home/deployer/.ssh/authorized_keys sudo nano /home/deployer/.ssh/authorized_keys # 貼上公鑰 sudo chmod 700 /home/deployer/.ssh sudo chmod 600 /home/deployer/.ssh/authorized_keys
(4) 在 Jenkins 中設定憑證與工具:
登入 Jenkins,前往「Manage Jenkins」>「Plugins」,安裝
SSH Agent與NodeJS插件。前往「Manage Jenkins」>「Tools」,新增一個 NodeJS 安裝,命名為
NodeJS-LTS。前往「Manage Jenkins」>「Credentials」,新增一個
SSH Username with private key類型的憑證。將jenkins使用者的私鑰 (/var/lib/jenkins/.ssh/id_rsa) 內容貼入,使用者名稱設為deployer,ID 設為jenkins-ssh-to-rpi。
(5) 建立 Pipeline 任務:
於 Jenkins 首頁建立一個新的「Pipeline」任務。
在「Build Triggers」中,勾選「GitHub hook trigger for GITScm polling」。
在「Pipeline」區塊,貼上以下腳本 (請替換為您的 GitHub repository URL)。此腳本定義了從拉取程式碼、安裝依賴、生成靜態檔案到透過 SSH 安全部署的完整流程。
pipeline { agent any tools { nodejs 'NodeJS-LTS' } stages { stage('Checkout') { steps { git url: 'https://github.com/your-username/your-hexo-repo.git', branch: 'main' } } stage('Install Dependencies') { steps { sh 'npm install' } } stage('Generate Static Files') { steps { sh 'npx hexo clean' sh 'npx hexo generate' } } stage('Deploy to Caddy via SSH') { steps { sshagent(credentials: ['jenkins-ssh-to-rpi']) { sh ''' ssh -o StrictHostKeyChecking=no deployer@localhost << 'ENDSSH' echo ">>> Cleaning old website files..." rm -rf /var/www/hexo/* echo ">>> Copying new website files..." cp -r public/* /var/www/hexo/ echo ">>> Deployment complete!" exit ENDSSH ''' } } } } }
八、建立自動化災難恢復機制 (NAS 備份)
此階段旨在建立一個自動化的資料備份機制,以保障系統與資料的完整性及可恢復性。
1. 網路附加儲存 (NAS) 端點準備作業
(1) 啟用遠端登入: 於 Mac mini 的 系統設定 -> 一般 -> 分享 中,啟用 遠端登入 服務。
(2) 建立備份儲存區: 於外接儲存裝置上建立備份資料的主目錄,例如 /Volumes/OWC_Disk/Backups。
(3) 產生 SSH 金鑰對: 於 Mac mini 終端機中,為備份任務產生專用的 SSH 金鑰。建議使用 ed25519 演算法,因其在提供同等級別安全性的前提下,金鑰長度更短,驗證速度更快。
ssh-keygen -t ed25519 -f ~/.ssh/nas_backup_key -C "NAS Backup Key"
(4) 提取公鑰: 顯示並複製產生的公鑰內容。
cat ~/.ssh/nas_backup_key.pub
2. 來源伺服器 (RPi5 & RPi4) 端點設定
此設定需在 Raspberry Pi 5 與 Raspberry Pi 4 上分別執行。
(1) 建立備份專用使用者: 建立一個低權限的專用使用者,避免使用具備管理權限的帳號進行備份,以符合最小權限原則。
sudo adduser backup_user
(2) 授權 NAS 的公鑰:
# 切換至 backup_user
sudo su -s /bin/bash backup_user
# 建立 .ssh 目錄並設定權限
mkdir ~/.ssh
chmod 700 ~/.ssh
# 將 NAS 的公鑰寫入授權檔案
nano ~/.ssh/authorized_keys # 貼上後儲存退出
chmod 600 ~/.ssh/authorized_keys
# 退出
exit
3. 備份執行腳本撰寫
於 Mac mini 上建立備份執行腳本,例如 ~/backup_script.sh。
#!/bin/bash
# 備份主目錄
BACKUP_DIR="/Volumes/OWC_Disk/Backups"
# SSH 私鑰路徑
KEY_PATH="$HOME/.ssh/nas_backup_key"
# RPi 的 IP 位址 (請換成您自己的)
RPI5_IP="192.168.1.100"
RPI4_IP="192.168.1.101"
# 記錄檔
LOG_FILE="$BACKUP_DIR/backup_log_$(date +%Y-%m-%d).log"
echo "=== 開始備份工作 at $(date) ===" >> "$LOG_FILE"
# --- 備份 RPi5 ---
echo "--- 正在備份 RPi5 ($RPI5_IP) ---" >> "$LOG_FILE"
rsync -avz --delete -e "ssh -i $KEY_PATH" \
backup_user@$RPI5_IP:/etc/ "$BACKUP_DIR/rpi5/etc/" >> "$LOG_FILE" 2>&1
rsync -avz --delete -e "ssh -i $KEY_PATH" \
backup_user@$RPI5_IP:/var/www/ "$BACKUP_DIR/rpi5/www/" >> "$LOG_FILE" 2>&1
rsync -avz --delete -e "ssh -i $KEY_PATH" \
backup_user@$RPI5_IP:/var/lib/jenkins/ "$BACKUP_DIR/rpi5/jenkins/" >> "$LOG_FILE" 2>&1
# --- 備份 RPi4 (Home Assistant) ---
# 最佳實踐是備份 HA 產生的快照檔案
echo "--- 正在備份 RPi4 ($RPI4_IP) Home Assistant 快照 ---" >> "$LOG_FILE"
rsync -avz --delete -e "ssh -i $KEY_PATH" \
backup_user@$RPI4_IP:/usr/share/hassio/backup/ "$BACKUP_DIR/rpi4/home_assistant_snapshots/" >> "$LOG_FILE" 2>&1
# 注意:您需要先在 Home Assistant UI 中設定每日自動建立快照
echo "=== 備份工作完成 at $(date) ===" >> "$LOG_FILE"
授予腳本執行權限:chmod +x ~/backup_script.sh。
4. 自動化排程任務設定 (launchd)
使用 macOS 的 launchd 服務來實現定時執行。
(1) 於 ~/Library/LaunchAgents/ 目錄下建立 .plist 設定檔,例如 com.myuser.dailybackup.plist。
(2) 填入以下內容,並根據實際情況修改使用者名稱與腳本路徑:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.YourUsername.dailybackup</string>
<key>ProgramArguments</key>
<array>
<string>/Users/YourUsername/backup_script.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>3</integer> <!-- 每日凌晨 3 點 -->
<key>Minute</key>
<integer>0</integer>
</dict>
</dict>
</plist>
(3) 載入並啟用排程任務:
launchctl load ~/Library/LaunchAgents/com.myuser.dailybackup.plist
此後,備份任務將每日定時自動執行。
九、附錄:效能評測與規格清單
為量化本架構所帶來的效能提升,並為後續的系統調校提供基準數據,本節將提供儲存裝置與網站應用程式的效能評測方法。
1. 系統軟硬體規格清單
| 分類 | 項目 | 規格 / 型號 / 版本 | 備註 |
|---|---|---|---|
| 硬體 | 主伺服器 (RPi5) | Raspberry Pi 5 Model B (8GB RAM) | 運行 Caddy, Jenkins, Hexo, .NET |
| 儲存 (RPi5) | NVMe SSD (e.g., 256GB WD SN740) + PCIe HAT | 作為系統主碟 | |
| 智慧家庭伺服器 (RPi4) | Raspberry Pi 4 Model B (4GB RAM) | 運行 Home Assistant OS | |
| 網路附加儲存 (NAS) | Mac mini (M1) + OWC USB-C 硬碟 | 負責執行自動化備份 | |
| 軟體 | 作業系統 (RPi5, RPi4) | Raspberry Pi OS (64-bit, Bookworm) | |
| 作業系統 (NAS) | macOS | ||
| 網頁伺服器 | Caddy v2.x | ||
| CI/CD 工具 | Jenkins LTS | ||
| 部落格框架 | Hexo | ||
| 動態網站框架 | .NET 9 | ||
| 智慧家庭平台 | Home Assistant | ||
| 安全閘道 | Cloudflare Tunnel + Zero Trust |
2. 儲存裝置效能評測 (SSD vs. microSD)
此評測旨在驗證 NVMe SSD 相較於傳統 A2 等級 microSD 卡在 I/O 效能上的優勢。伺服器應用場景中,除了循序讀寫速度外,4K 隨機讀寫效能 (IOPS) 對於系統反應速度與多工處理能力影響更為顯著。
(1) 安裝評測工具:
sudo apt-get update
sudo apt-get install -y hdparm iozone
(2) 執行評測:
循序讀取速度 (Buffered Read):
# 測試 NVMe SSD (通常為 /dev/nvme0n1) sudo hdparm -t /dev/nvme0n1 Timing buffered disk reads: 1126 MB in 3.00 seconds = 374.95 MB/sec # 測試 microSD 卡 (通常為 /dev/mmcblk0) sudo hdparm -t /dev/mmcblk0綜合讀寫效能 (iozone): 此工具能更全面地測試不同區塊大小下的讀寫效能。
# 於 SSD 掛載的目錄下執行 sudo apt install iozone3 iozone -e -I -a -s 1G -r 4k -i 0 -i 1 -i 2 # 於 microSD 掛載的目錄下執行 (若已從 SSD 啟動,需另外掛載) # iozone -e -I -a -s 1G -r 4k -i 0 -i 1 -i 2Iozone: Performance Test of File I/O Version $Revision: 3.507 $ Compiled for 64 bit mode. Build: linux
Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins Al Slater, Scott Rhine, Mike Wisner, Ken Goss Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR, Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner, Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone, Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root, Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer, Vangel Bojaxhi, Ben England, Vikentsi Lapa, Alexey Skidanov, Sudhir Kumar.
Run began: Wed Jul 16 21:11:02 2025
Include fsync in write timing
O_DIRECT feature enabled
Auto Mode
File size set to 1048576 kB
Record Size 4 kB
Command line used: iozone -e -I -a -s 1G -r 4k -i 0 -i 1 -i 2
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
1048576 4 118159 169485 149898 150418 65357 155654
(3) 預期結果分析 (範例):
| 評測項目 | NVMe SSD (範例值) | A2 microSD 卡 (範例值) | 效能分析 |
|---|---|---|---|
| 循序讀取 (hdparm) | ~850 MB/sec | ~85 MB/sec | SSD 在大型檔案傳輸上快約 10 倍 |
| 4K 隨機讀取 (iozone) | ~25000 ops/sec | ~1500 ops/sec | SSD 在處理大量小檔案與系統多工時,反應速度顯著優越 |
| 4K 隨機寫入 (iozone) | ~18000 ops/sec | ~500 ops/sec | 對於資料庫、日誌等頻繁寫入操作,SSD 能提供更佳效能與耐用性 |
3. 網站應用程式效能評測
此評測旨在評估伺服器在負載下的請求處理能力。我們將使用 Apache Benchmark (ab) 工具,從區域網路中的另一台電腦對 RPi5 上的網站發起壓力測試。
(1) 安裝評測工具 (於測試用電腦):
# Debian/Ubuntu
sudo apt-get install apache2-utils
# macOS (via Homebrew)
brew install httpd
(2) 執行評測:
測試靜態部落格 (Hexo):
# -n: 總請求數, -c: 並發請求數 ab -n 1000 -c 50 https://blog.your-domain.com/測試動態網站 (.NET):
ab -n 500 -c 25 https://webapp.your-domain.com/api/some-endpoint
(3) 預期結果分析 (範例):
| 評測項目 | Hexo 靜態網站 | .NET 動態網站 | 效能分析 |
|---|---|---|---|
| 每秒請求數 (RPS) | > 500 | ~150 | 靜態網站在無計算負載下,RPS 極高。動態網站的 RPS 則取決於後端邏輯的複雜度。 |
| 平均每次請求時間 | < 2 ms | ~ 15 ms | 反映了伺服器處理單一請求的速度。 |
透過這些量化數據,可以清晰地了解系統在不同層面的效能表現,並作為未來進行效能瓶頸分析與系統調優的依據。
十、總結
綜上所述,本文件詳細闡述了一套基於 Raspberry Pi 5 的多功能伺服器整合方案。透過整合固態硬碟、Cloudflare 安全服務、Caddy 伺服器、Jenkins 自動化工具及跨裝置備份機制,成功建構了一個兼具高效能、高安全性與高可用性的系統環境。此架構不僅適用於個人專案與技術驗證,其模組化的設計理念、對最小權限原則的遵循以及完善的災難恢復策略,亦可為小型企業或團隊在建構內部基礎設施時,提供具高度參考價值的部署範例。